package com.yulinlin.admin.modules.generate.controller;

import com.yulinlin.admin.modules.generate.domain.config.TableViewConfig;
import com.yulinlin.admin.modules.generate.domain.po.TableViewPo;
import com.yulinlin.admin.modules.generate.service.GenerateService;
import com.yulinlin.common.domain.RequestPo;
import com.yulinlin.common.domain.ResponseVo;
import com.yulinlin.common.domain.vo.PageVo;
import com.yulinlin.data.core.session.QueryRequest;
import com.yulinlin.data.core.wrapper.SelectWrapper;
import com.yulinlin.jdbc.session.JdbcSession;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

@Api(tags = "可视化")
@RestController
@RequestMapping("/g2")
public class G2Controller {

    @Autowired
    private GenerateService service;

    @Autowired
    private JdbcSession sqlSession;

    @RequestMapping(value = "config",method = RequestMethod.POST)
    public ResponseVo config(){
        TableViewConfig config =TableViewConfig.newInstance();
        config.setList(service.all());
        return ResponseVo.newInstance(config);
    }

    @RequestMapping(value = "page",method = RequestMethod.POST)
    public ResponseVo page(@RequestBody RequestPo<TableViewPo> po){
        TableViewPo data =   po.getData();


        SelectWrapper wrapper =         new SelectWrapper();

        wrapper.table(data.getTableName());
        switch (data.getDataType()){
            case count:{
                wrapper.select()

                        .count(data.getDataColumn(),"total");

                break;
            }case sum:{
                wrapper.select()
                        .sum(data.getDataColumn(),"total");

                break;
            }case avg:{
                wrapper.select()
                        .avg(data.getDataColumn(),"total");
                break;
            }
        }

        switch (data.getGroupType()){
            case day:{
                wrapper.select()
                        .day(data.getGroupColumn(),"crtTime")
              ;
                break;
            }case month:{
                wrapper.select()
                        .month(data.getGroupColumn(),"crtTime")
                ;
                break;
            }case year:{
                wrapper.select()
                        .year(data.getGroupColumn(),"crtTime")
                ;
                break;
            }case string:{
                wrapper.select()
                        .column(data.getGroupColumn(),"crtTime")
                ;
                break;
            }
        }

        wrapper.group();
        QueryRequest request =  sqlSession.newQueryRequest(wrapper,TotalVo.class);

        List<TotalVo> list =   sqlSession.selectList(request);

        return ResponseVo.newInstance(PageVo.newInstance(list));
    }

}
